//////////////////////////////////////////////////////////////////////////
// $Id: Viewport.cpp,v 1.1 2009/04/03 12:46:11 sunjun Exp $
//////////////////////////////////////////////////////////////////////////

#include "Local.h"

//////////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////////

NAMESPACE_BEGIN

//////////////////////////////////////////////////////////////////////////	

	Viewport::Viewport()
	{
		mX = 0;
		mY = 0;
		mWidth = 800;
		mHeight = 600;
		mMinZ = 0.0;
		mMaxZ = 1.0;
	}

	Viewport::~Viewport() 
	{
		
	}

	//////////////////////////////////////////////////////////////////////////	

	/*
	====================
	set
	====================
	*/
	INLINE VOID Viewport::set( U32 x, U32 y, U32 width, U32 height, F32 min_z, F32 max_z )
	{
		mX = x;
		mY = y;
		mWidth = width;
		mHeight = height;
		mMinZ = min_z;
		mMaxZ = max_z;
	}

	/*
	====================
	operator
	====================
	*/
	INLINE VOID Viewport::operator() (Context*rc)
	{
		GUARD(Viewport::operator());

		CHECK(rc);

		D3DVIEWPORT9 viewport;
		viewport.X = mX;
		viewport.Y = mY;
		viewport.Width = mWidth;
		viewport.Height = mHeight;
		viewport.MinZ = mMinZ;
		viewport.MaxZ = mMaxZ;

		HRESULT hr = ((IDirect3DDevice9*)rc->handle())->SetViewport( &viewport );
		if(FAILED(hr)) MAssert(VA("Viewport::operator() : fail to set the viewport(%s)!", DXGetErrorDescription(hr)));

		UNGUARD;
	}
	

//////////////////////////////////////////////////////////////////////////

NAMESPACE_END

//////////////////////////////////////////////////////////////////////////
